package com.hdax.service.Impl;

import com.hdax.entity.Contractfile;
import com.hdax.mappers.ContractfileMapepr;
import com.hdax.service.ContractfileService;
import com.hdax.utils.ResultUtil;
import fr.opensagres.xdocreport.core.XDocReportException;
import fr.opensagres.xdocreport.document.IXDocReport;
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
import fr.opensagres.xdocreport.template.IContext;
import fr.opensagres.xdocreport.template.TemplateEngineKind;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * impl contractfile服务
 *
 * @author Aizen
 * @date 2022/05/20
 */
@Service
public class ContractfileServiceImpl implements ContractfileService {

    @Autowired
    private ContractfileMapepr contractfileMapepr;

    @Override
    public List<Contractfile> findByName(int offset,int limit, String contractname) {
        return contractfileMapepr.findByName(offset,limit,contractname);
    }

    @Override
    public int countByName(String contractname) {
        return contractfileMapepr.countByName(contractname);
    }

    @Override
    public Contractfile findById(int id) {
        return contractfileMapepr.findById(id);
    }

    @Override
    public ResultUtil deleteCon(int id) {
        //查看该合同是否有人签订
        if(contractfileMapepr.isqian(id) == 0){
            contractfileMapepr.deleteCon(id);
            return ResultUtil.upDataResult("删除成功");
        }
        return ResultUtil.upDataResult("删除失败，合同使用中");
    }

    @Override
    public int insertCon(Contractfile contractfile) {
        return contractfileMapepr.insertCon(contractfile);
    }

    @Override
    public int updateCon(Contractfile contractfile) {
        return contractfileMapepr.updateCon(contractfile);
    }

    @Override
    public List<Contractfile> findAll() {
        return contractfileMapepr.findAll();
    }

    @Override
    public ResultUtil addContract(Contractfile contractfile) {
        try {
            contractfileMapepr.addContract(contractfile);
            return ResultUtil.upDataResult("添加成功!!");
        } catch (Exception e) {
            return ResultUtil.upDataResult("添加失败...");
        }
    }

    /**
     * 根据ID查询合同和该合同签订的信息
     *
     * @param conId 反对id
     * @return {@link ResultUtil}
     */
    @Override
    public ResultUtil findConAndEmployee(int conId) {
        //合同下所有签订信息（签订人，开始时间，结束时间，签订年限）
        List<Contractfile> contractfileList = contractfileMapepr.findEmployee(conId);
        //把信息装到data里
        return ResultUtil.result(contractfileList);
    }

    @Override
    public ResultUtil findConAndEmployee2(int conId) {
        //签订人的所有合同信息
        List<Contractfile> contractfileList = contractfileMapepr.findEmployee2(conId);
        //把信息装到data里
        return ResultUtil.result(contractfileList);
    }

    @Override
    public Boolean export(Integer conId) {
        // 根据编号查询信息
        Contractfile data = contractfileMapepr.getExportData(conId);
        try {
            InputStream in = this.getClass().getResourceAsStream("/document/合同模板.docx") ;
            IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, TemplateEngineKind.Freemarker);

            IContext context = report.createContext();

            context.put("title",data.getContractName());
            context.put("content",data.getText());
            context.put("empName",data.getEmpName());
            context.put("startDate",data.getStartDate());
            context.put("endDate",data.getEndDate());
            context.put("duration",data.getYear()+"年");
            //文档名称
            String docName = data.getContractName()+"_"+data.getEmpName();
            //输出到本地目录
            FileOutputStream out = new FileOutputStream(new File("src/main/resources/document/"+docName+".docx"));
            report.process(context,out);

            in.close();
            out.close();
            System.out.println(data.getEmpName()+"合同的word文档导出成功");
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        } catch (XDocReportException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}
